<?php
    header("content-type:text/html;charset=utf-8");
    //设置时区(默认 UTC )
    date_default_timezone_set("PRC");
    /**
     * 画验证码
     * [vcode description]
     * @param  $width  验证码宽
     * @param  $height  验证码高
     * @param  $type    验证码类型 1:数字; 2:字母; 3:数字和字母
     * @param  $len     验证码长度
     * @param  $ttf     验证码字体类型
     * @return
     */
    function vcode ($width = 100, $height = 60, $type = 1, $len = 4, $ttf)
    {
        // 1. 创建画布
        $img = imagecreatetruecolor($width, $height);
        // 2. 准备颜色
        //另外写两个函数,lightcolor,darkcolor;

        // 3. 填充画布背景
        imagefill($img, 0, 0, lightcolor($img));
        // 4. 作画

        // 循环画点
        for($i = 0; $i < floor($width*2) ; $i++){
            $x = mt_rand(0, $width);
            $y = mt_rand(0, $height);
            imagesetpixel($img, $x, $y, darkcolor($img));
        }

        // 循环画线
        for($i = 0; $i < ceil($height / 6); $i++){
            $x1 = mt_rand(0, $width);
            $y1 = mt_rand(0, $height);
            $x2 = mt_rand(0, $width);
            $y2 = mt_rand(0, $height);
            imageline($img, $x1, $y1, $x2, $y2, darkcolor($img));
        }

        // 验证码字符串
        $str = '1234567890qwertyuioplkjhgfdsazxcvbnmMNBVCXZASDFGHJKLPOIUYTREWQ';

        switch ($type) {
            case 1:			//代表验证码为纯数字
                $begin = 0;
                $end = 9;
                break;
            case 2:			//代表验证码为纯字母
                $begin = 10;
                $end = 61;
                break;
            case 3:			//代表验证码为数字加字母
                $begin = 0;
                $end = 61;
                break;
        }
        //得到验证码中的随机字符串
        $new_str = '';
        for($i = 0; $i < $len ; $i++){
            $j = mt_rand($begin, $end);
            $new_str .= substr($str,$j,1);
        }
        //以后会用到
        session_start();
        $_SESSION['code'] = $new_str;
        //写字
        for($i = 0; $i < $len ; $i++){
            $x = floor($width / $len)*$i+5;
            $y = mt_rand(floor($height / 2), floor($height / 3 * 2));
            imagettftext(
                $img,
                floor($height / 2),
                mt_rand(-20,20),
                $x,$y,
                darkcolor($img),
                //'./font/'. mt_rand(1,5) .'.ttf',
                $ttf,
                $new_str[$i]
            );
        }

        // 5. 输出
        header("content-type:image/jpeg");
        imagejpeg($img);
        // 6. 销毁资源,释放内存
        imagedestroy($img);
    }


    /**
     * 获取亮色
     * [lightcolor description]
     * @param  [type] $img [description]
     * @return [type]      [description]
     */
    function lightcolor ($img)
    {
        return imagecolorallocate($img, mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
    }

    /**
     * 获取暗色
     * [darkcolor description]
     * @param  [type] $img [description]
     * @return [type]      [description]
     */
    function darkcolor ($img)
    {
        return imagecolorallocate($img, mt_rand(0,105), mt_rand(0,105), mt_rand(0,105));
    }
    vcode(150, 40, 1, 4, '../public/home/fonts/1.ttf');

?>